//? ES6模板字符串 而不是vue的模板语法

const data = {
    name: "小明",
    age: 16,
    school: "第三中学",
    classroom: "教室2",
};
// 解构取值
let { name, age, school, classroom } = data;

/**
 * @description: 双指针匹配 模板字符串，发现${}
 * @param {*} s
 * @return {*}
 * @author: jlx
 */
//? 双指针方法
function matchStrV2(s) {
    let res = "";
    for (let i = 0; i < s.length - 1; i++) {
        let j = i + 2;
        if (s[i] == "$" && s[i + 1] == "{") {
            // 直到 右侧括号匹配成功
            while (j < s.length && s[j] != "}") j++;
            // 说明匹配成功
            if (s[j] == "}") {
                res += eval(s.substring(i + 2, j));
            }
            i = j + 1;
        } else {
            res += s[i];
        }
    }
    return res;
}

let cases =
    "${ name } 今年 ${ age } 岁，就读于 ${ school } 今天在 ${ classroom } 上课，${ name } ${ data.age >= 18 ? '成年了' : '未成年' }";

console.log(matchStrV2(cases));
// 小明今年 16岁，就读于 第三中学今天在 教室2上课，小明未成年

//? 正则表达式方法
const template = 'My name is ${name} and I am ${age} years old.';
const regex = /\${(\w+)}/g;
const values = { name: 'Alice', age: 25 };
const result = template.replace(regex, (match, key) => {
    console.log(match);
    return values[key]
});
console.log(result); // 输出 'My name is Alice and I am 25 years old.'
